package busterminal.persistence.memory;

import busterminal.persistence.BusDAO;
import busterminal.persistence.BusModelDAO;
import busterminal.persistence.DaoFactory;
import busterminal.persistence.RouteDAO;
import busterminal.persistence.ScheduledItemDAO;
import busterminal.persistence.StoppingPointDAO;
import busterminal.persistence.TripDAO;

/**
 * Класс-фабрика, возвращающий ссылки на реализации интерфейсов для каждой сущности для работы с коллекцией
 */
public class MemoryDAOFactory implements DaoFactory {

    /**
     * Получить ссылку на реализацию интерфейса для автобуса для работы с коллекцией
     * @return ссылка на класс-реализацию интерфейса {@link BusDAO}
     */
    @Override
    public BusDAO getBusDAO() {
        return new MemoryBusDAO();
    }

    /**
     * Получить ссылку на реализацию интерфейса для модели автобуса для работы с коллекцией
     * @return ссылка на класс-реализацию интерфейса {@link BusModelDAO}
     */
    @Override
    public BusModelDAO getBusModelDAO() {
        return new MemoryBusModelDAO();
    }

    /**
     * Получить ссылку на реализацию интерфейса для маршрута для работы с коллекцией
     * @return ссылка на класс-реализацию интерфейса {@link RouteDAO}
     */
    @Override
    public RouteDAO getRouteDAO() {
        return new MemoryRouteDAO();
    }

    /**
     * Получить ссылку на реализацию интерфейса для пункта расписания для работы с коллекцией
     * @return ссылка на класс-реализацию интерфейса {@link ScheduledItemDAO}
     */
    @Override
    public ScheduledItemDAO getScheduledItemDAO() {
        return new MemoryScheduledItemDAO();
    }

    /**
     * Получить ссылку на реализацию интерфейса для остановочного пункта для работы с коллекцией
     * @return ссылка на класс-реализацию интерфейса {@link StoppingPointDAO}
     */
    @Override
    public StoppingPointDAO getStoppingPointDAO() {
        return new MemoryStoppingPointDAO();
    }

    /**
     * Получить ссылку на реализацию интерфейса для рейса для работы с коллекцией
     * @return ссылка на класс-реализацию интерфейса {@link TripDAO}
     */
    @Override
    public TripDAO getTripDAO() {
        return new MemoryTripDAO();
    }
}
